<?php

class ComunicadoDao extends Dao {

    /**
     * @var ClienteService
     */
    private $clienteService;

    public function injectDependencies() {
        $this->clienteService = ClienteService::getInstance();
    }

    public function findById($IDComunicado) {
        $this->initConnection();
        $this->tMysqli->escape($IDComunicado);
        $StSql = TQuery::getSqlFindAnnouncementById($IDComunicado);
        $this->tMysqli->exec($StSql);
        $ArComunicado = $this->tMysqli->fetchAll();
        if( !empty($ArComunicado[0]) ) {
            $Comunicado = new Comunicado($ArComunicado[0], $this->tMysqli);
        }
        $this->closeConnection();
        return isset($Comunicado) ? $Comunicado : false ;
    }

    public function findAll() {
        $StSql = TQuery::getSqlFindAllAnnouncements();
        $this->initConnection();
        $tQuery = $this->tMysqli->exec($StSql);
        $ArComunicados = array();
        while($ArAnnouncementData = mysqli_fetch_assoc($tQuery)){
            $ArComunicados[] = new Comunicado($ArAnnouncementData, $this->tMysqli);
        }
        $this->closeConnection();
        return $ArComunicados;
    }

    public function findCommunicationsByCustomer($IDCliente) {
        $this->initConnection();
        $this->tMysqli->escape($IDCliente);
        $StSql = TQuery::getSqlFindCommunicationsByCustomer($IDCliente);
        $tQuery = $this->tMysqli->exec($StSql);
        $ArCommunications = array();
        while($ArDadosComunicado = mysqli_fetch_assoc($tQuery)) {
            $ArCommunications[] = new Comunicado($ArDadosComunicado, $this->tMysqli);
        }
        $this->closeConnection();
        return $ArCommunications;
    }

    public function countAnnouncementByCustomer($IDCliente) {
        $ArComunicados = array('ELOGIO' => 0, 'ERRO' => 0, 'SUGESTAO' => 0);
        $this->initConnection();
        $this->tMysqli->escape($IDCliente);
        $StSql = TQuery::getSqlFindAllAnnouncementByCustomer($IDCliente);
        $tQuery = $this->tMysqli->exec($StSql);
        while($ArComunicadoData = mysqli_fetch_assoc($tQuery)) {
            $Comunicado = new Comunicado($ArComunicadoData, $this->tMysqli);
            $ArComunicados[$Comunicado->getEnTipoComunicado()]++;
        }
        $this->closeConnection();
        $ArComunicados['TOTAL'] = array_sum($ArComunicados);
        return $ArComunicados;
    }

    public function countNumberOfAnnouncementByType($EnTipoComunicado) {
        $this->initConnection();
        $this->tMysqli->escape($EnTipoComunicado);
        $StSql = TQuery::getSqlFindCustomerWithMoreAnnouncementType($EnTipoComunicado);
        $tQuery = $this->tMysqli->exec($StSql);
        $ArAnnouncementTypeReport = array();
        while($ArReportData = mysqli_fetch_assoc($tQuery)) {
            $ArAnnouncementTypeReport[] = array(
                'Customer' => $this->clienteService->findById( $ArReportData['IDCliente'] ),
                'NumberOfAnnouncement' => $this->countAnnouncementByCustomer($ArReportData['IDCliente']),
                'AnnouncementTypeNumber' => $ArReportData['NumberOfAnnouncement']
            );
        }
        $this->closeConnection();
        return $ArAnnouncementTypeReport;
    }

}

?>
